package com.itheima.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;

import javax.sql.DataSource;

public class MybatisConfig {

    /*@Bean("dataSource2") //参数表示bean对象的名称,如果不写名称，方法名首字母小写就是默认的名称
    public DruidDataSource createDruidDataSource2(){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }*/
    /*
        <bean class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--注入连接池对象,必须配置-->
            <property name="dataSource" ref="dataSource"/>

            <!--注入核心配置文件的位置,可选，如果不使用核心配置文件，那么核心配置文件中的内容都需要在此处配置-->
            <!--<property name="configLocation" value="classpath:MybatisConfig.xml"/>-->

            <!--配置别名，可选，-->
            <property name="typeAliasesPackage" value="com.itheima.bean"/>

            <!--配置映射文件的位置,如果映射文件和mapper在同一级包下，那么可以不用指定映射文件的位置，映射文件的名称要和接口名一样-->
            <!--<property name="mapperLocations" value="classpath:com/itheima/mapper/StudentMapper.xml"/>-->
        </bean>

        说明：该方法会有spring调用，spring在调用这个方法的时候，发现参数有一个dataSource，就会在容器中找有没有dataSource
        对象，如果有，就传递进来，如果没有就报错。参数默认是按照类型匹配，相当于省略了@Autowired
    */
    @Bean
    public SqlSessionFactoryBean createSqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource){
        SqlSessionFactoryBean ssfb=new SqlSessionFactoryBean();
        //设置连接池
        ssfb.setDataSource(dataSource);
        //设置别名
        ssfb.setTypeAliasesPackage("com.itheima.bean");
        //设置映射文件位置 <property name="mapperLocations" value="classpath:StudentMapper.xml"/>
        //ssfb.setMapperLocations(new ClassPathResource("StudentMapper.xml"));
        return ssfb;
    }
    /*
         <!--3 配置MapperScannerConfigurer
            作用：1 告诉spring我们的mapper或者dao所在的位置，创建mapper对应的代理对象保存到spring容器中
        -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--注入mapper或者dao所在的包，必须-->
            <property name="basePackage" value="com.itheima.mapper"/>
        </bean>
     */
    @Bean
    public MapperScannerConfigurer createMapperScannerConfigurer(){
        MapperScannerConfigurer msc=new MapperScannerConfigurer();
        msc.setBasePackage("com.itheima.mapper");
        return msc;
    }
}
